home *** CD-ROM | disk | FTP | other *** search
/ Aminet 16 / Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso / Aminet / misc / emu / QDOS2.lha / QLsource / ROMsrc / SYS / QDOS1_asm < prev    next >
Text File  |  1995-07-03  |  24KB  |  1,015 lines

  1. */beginfile QDOS1_asm
  2. ; --------------------------------------------------------------
  3. ; QDOS1_asm - The QDOS kernel
  4. ;       - last modified 03/07/95
  5. ; QDOS-Amiga sources by Rainer Kowallik
  6. ;    ...latest changes by Mark J Swift
  7. ; --------------------------------------------------------------
  8. ;*/beginoverlay
  9. ORG0:
  10.     DC.L    $28480
  11.     DC.L    SYS_STARt-ORG0
  12.     DC.L    BUSERR-ORG0
  13.     DC.L    ADR_ERR-ORG0
  14.     DC.L    ILL_INST-ORG0
  15.     DC.L    ZERO_DIV-ORG0
  16.     DC.L    CHK_INST-ORG0
  17.     DC.L    TRAPV_INst-ORG0
  18.     DC.L    MSR_EMU-ORG0    ; priviledge error
  19.     DC.L    TRACE-ORG0
  20. ; line %1010 emulator - not implemented in JS
  21. L00028:
  22.     DC.L    TAS_EMU-ORG0
  23. ; line %1111 emulator - not implemented on JS
  24.     DC.L    TAS_EMU-ORG0
  25. ; other vectors are reserved
  26.     DC.L    TRPOTHER-ORG0
  27.     DC.L    TRPOTHER-ORG0
  28.     DC.L    TRPOTHER-ORG0
  29.     DC.L    TRPOTHER-ORG0
  30.     DC.L    TRPOTHER-ORG0
  31.     DC.L    TRPOTHER-ORG0
  32.     DC.L    TRPOTHER-ORG0
  33.     DC.L    TRPOTHER-ORG0
  34. L00050:
  35.     DC.L    TRPOTHER-ORG0
  36. L00054:
  37.     DC.L    TRPOTHER-ORG0
  38.     DC.L    TRPOTHER-ORG0
  39. L0005C:
  40.     DC.L    TRPOTHER-ORG0
  41. ; long vectors for interrupt levels 0 through 7
  42. L00060:
  43.     DC.L    ILLEG_INT-ORG0
  44.     DC.L    ILLEG_INT-ORG0
  45.     DC.L    QL_MAIN_INT-ORG0
  46.     DC.L    ILLEG_INT-ORG0
  47.     DC.L    ILLEG_INT-ORG0
  48.     DC.L    ILLEG_INT-ORG0
  49.     DC.L    ILLEG_INT-ORG0
  50.     DC.L    NMI_INT-ORG0
  51. ; standard QDOS trap vectors
  52.     DC.L    TRAP0-ORG0    ;*/note routine has moved
  53.     DC.L    TRAP1-ORG0
  54.     DC.L    TRAP2-ORG0
  55.     DC.L    TRAP3-ORG0
  56.     DC.L    TRAP4-ORG0
  57. ; user defined trap vectors
  58.     DC.L    TRAP5-ORG0
  59.     DC.L    TRAP6-ORG0
  60.     DC.L    TRAP7-ORG0
  61.     DC.L    TRAP8-ORG0
  62.     DC.L    TRAP9-ORG0
  63.     DC.L    TRAP10-ORG0
  64.     DC.L    TRAP11-ORG0
  65.     DC.L    TRAP12-ORG0
  66.     DC.L    TRAP13-ORG0
  67.     DC.L    TRAP14-ORG0
  68.     DC.L    TRAP15-ORG0
  69.     DC.W    MM_ALCHP-ORG0
  70.     DC.W    MM_RECHP-ORG0
  71.     DC.W    UT_WINDW-ORG0
  72.     DC.W    UT_CON-ORG0
  73.     DC.W    UT_SCR-ORG0
  74.     DC.W    UT_ERR0-ORG0
  75.     DC.W    UT_ERR-ORG0
  76.     DC.W    UT_MINT-ORG0
  77.     DC.W    UT_MTEXT-ORG0
  78.     DC.W    UT_LINK-ORG0
  79.     DC.W    MT_UNLNK-ORG0
  80.     DC.W    0
  81.     DC.W    MM_ALLOC-ORG0
  82.     DC.W    MM_LNKFR-ORG0
  83.     DC.W    IO_QSET-ORG0
  84.     DC.W    IO_QTEST-ORG0
  85.     DC.W    IO_QIN-ORG0
  86.     DC.W    IO_QOUT-ORG0
  87.     DC.W    IO_QEOF-ORG0    ;*/note routine has moved
  88.     DC.W    UT_CSTR-ORG0
  89.     DC.W    IO_SERQ-ORG0
  90.     DC.W    IO_SERIO-ORG0
  91.     DC.W    CN_DATE-ORG0
  92.     DC.W    CN_DAY-ORG0
  93.     DC.W    CN_FTOD-ORG0
  94.     DC.W    CN_ITOD-ORG0
  95.     DC.W    CN_ITOBB-ORG0
  96.     DC.W    CN_ITOBW-ORG0
  97.     DC.W    CN_ITOBL-ORG0
  98.     DC.W    CN_ITOHB-ORG0
  99.     DC.W    CN_ITOHW-ORG0
  100.     DC.W    CN_ITOHL-ORG0
  101.     DC.W    CN_DTOF-ORG0
  102.     DC.W    CN_DTOI-ORG0
  103.     DC.W    CN_BTOIB-ORG0
  104.     DC.W    CN_BTOIW-ORG0
  105.     DC.W    CN_BTOIL-ORG0
  106.     DC.W    CN_HTOIB-ORG0
  107.     DC.W    CN_HTOIW-ORG0
  108.     DC.W    CN_HTOIL-ORG0
  109.     DC.W    BP_INIT-ORG0
  110.     DC.W    CA_GTINT-ORG0
  111.     DC.W    CA_GTFP-ORG0
  112.     DC.W    CA_GTSTR-ORG0
  113.     DC.W    CA_GTLIN-ORG0
  114.     DC.W    BV_CHRIX-ORG0
  115.     DC.W    RI_EXEC-ORG0
  116.     DC.W    RI_EXECB-ORG0
  117.     DC.W    BP_LET-ORG0
  118.     DC.W    IO_NAME-ORG0
  119.     DC.W    MD_READ-$4000-ORG0
  120.     DC.W    MD_WRITE-$4000-ORG0
  121.     DC.W    MD_VERIN-$4000-ORG0
  122.     DC.W    MD_SECTR-$4000-ORG0
  123. ; These vectors not defined in the advanced user guide
  124.     DC.W    ANA_SYNX-$4000-ORG0 ; basic syntax analyser
  125.     DC.W    TB_LIST-$4000-ORG0  ; first syntax table
  126.                   ; (commands)
  127.     DC.W    EXP_SYNX-$4000-ORG0 ; second syntax table
  128.                   ; (expressions)
  129.     DC.W    FMT_LINE-$4000-ORG0 ; format precompiled line
  130.     DC.W    COMP_ERR-$4000-ORG0 ; error when compiling
  131.     DC.W    STO_LINE-$4000-ORG0 ; store precompiled line
  132.     DC.W    TKN_LIST-$4000-ORG0 ; convert precompiled line
  133.                   ; to ASCII
  134.     DC.W    INI_STCK-$4000-ORG0 ; initialize BASIC stacks
  135.  
  136. ;*/beginfilling
  137. NOP00400:
  138.     DCB.w    ($400-(NOP00400-ORG0))/2,$0000
  139. ;*/endfilling
  140. ;*/endoverlay
  141. ; --------------------------------------------------------------
  142. ;*/beginoverlay
  143. ;*/beginfilling
  144. NOP00408:
  145.     DCB.w    ($408-(NOP00408-ORG0))/2,$4E71
  146. ;*/endfilling
  147. ;*/endoverlay
  148. ; --------------------------------------------------------------
  149. ; Return ID of actual job in D0, base address in A3
  150. L00408:
  151. JOBID_ME:
  152.     MOVEA.L    SV_JBPNT(A6),A3    ; Ptr to current job table
  153.                 ; entry
  154. JOBID_ME2:
  155.     MOVE.L    A3,D0
  156.     SUB.L    SV_JBBAS(A6),D0    ; Ptr to base of job table
  157.     LSR.W    #2,D0
  158.     MOVEA.L    (A3),A3
  159.     SWAP    D0
  160.     MOVE.W    JB_TAG(A3),D0
  161.     SWAP    D0
  162.     RTS
  163. ; --------------------------------------------------------------
  164. ;*/beginoverlay
  165. L00420:
  166. ;*/beginfilling
  167. ; was code for starting and stopping transmission through 8049
  168. NOP00460:
  169.     DCB.w    ($460-(NOP00460-ORG0))/2,$4E71
  170. L00460:
  171. ;*/endfilling
  172. ;*/endoverlay
  173. ; --------------------------------------------------------------
  174. DO_TRAP1:
  175.     CMPI.W    #$24,D0
  176.     BHI.S    L004BC
  177.     MOVE.W    D0,D7
  178.     ADD.W    D7,D7
  179.     MOVE.W    TRAP1_TAb(PC,D7.W),D7
  180.     JMP    DO_TRAP1(PC,D7.W)
  181. L00472:
  182. TRAP1_TAb:
  183.     DC.W    MT_INF-DO_TRAP1    ; D0=0
  184.     DC.W    MT_CJOB-DO_TRAP1    ; 1
  185.     DC.W    MT_JINF-DO_TRAP1    ; 2
  186.     DC.W    L004BC-DO_TRAP1    ; 3 = ERROR
  187.     DC.W    MT_RJOB-DO_TRAP1    ; 4
  188.     DC.W    MT_FRJOB-DO_TRAP1 ; 5
  189.     DC.W    MT_FREE-DO_TRAP1    ; 6
  190.     DC.W    MT_TRAPV-DO_TRAP1 ; 7
  191.     DC.W    MT_SUSJB-DO_TRAP1 ; 8
  192.     DC.W    MT_RELJB-DO_TRAP1 ; 9
  193.     DC.W    MT_ACTIV-DO_TRAP1 ; A
  194.     DC.W    MT_PRIOR-DO_TRAP1 ; B
  195.     DC.W    MT_ALLOC-DO_TRAP1 ; C
  196.     DC.W    MT_LNKFR-DO_TRAP1 ; D
  197.     DC.W    MT_ALRES-DO_TRAP1 ; E
  198.     DC.W    MT_RERES-DO_TRAP1 ; F
  199.     DC.W    MT_DMODE-DO_TRAP1 ; 10
  200.     DC.W    MT_IPCOM-DO_TRAP1 ; 11
  201.     DC.W    MT_BAUD-DO_TRAP1    ; 12
  202.     DC.W    MT_RCLCK-DO_TRAP1 ; 13
  203.     DC.W    MT_SCLCK-DO_TRAP1 ; 14
  204.     DC.W    MT_ACLCK-DO_TRAP1 ; 15
  205.     DC.W    MT_ALBAS-DO_TRAP1 ; 16
  206.     DC.W    MT_REBAS-DO_TRAP1 ; 17
  207.     DC.W    MT_ALCHP-DO_TRAP1 ; 18
  208.     DC.W    MT_RECHP-DO_TRAP1 ; 19
  209.     DC.W    MT_LXINT-DO_TRAP1 ; 1A
  210.     DC.W    MT_RXINT-DO_TRAP1 ; 1B
  211.     DC.W    MT_LPOLL-DO_TRAP1 ; 1C
  212.     DC.W    MT_RPOLL-DO_TRAP1 ; 1D
  213.     DC.W    MT_LSCHD-DO_TRAP1 ; 1E
  214.     DC.W    MT_RSCHD-DO_TRAP1 ; 1F
  215.     DC.W    MT_LIOD-DO_TRAP1    ; 20
  216.     DC.W    MT_RIOD-DO_TRAP1    ; 21
  217.     DC.W    MT_LDD-DO_TRAP1    ; 22
  218.     DC.W    MT_RDD-DO_TRAP1    ; 23
  219.     DC.W    MT_TRA-DO_TRAP1    ; 24 not documented
  220. L004BC:
  221.     MOVEQ    #ERR.BP,D0    ; bad parameter return
  222.     BRA    RET_TRAP
  223. L004C2:
  224. MT_INF:
  225.     MOVEQ    #-1,D1
  226.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  227.     MOVE.L    #'3.23',D2    ;*/modify MOVE.L $BFF6,D2
  228.     MOVEA.L    A6,A0        ; pointer to sys vars
  229.     BRA    RET_CLD0
  230. ; *****************************************************
  231. ; * TRAP #1 with D0=$24 (undocumented)        *
  232. ; * D1=address  => install new key translation table    *
  233. ; * D1=1        => install ROM key translation table    *
  234. ; * D2=address  => install new system message table    *
  235. ; * D2=0        => leave old system messages     *
  236. ; *****************************************************
  237. L004D4:
  238. MT_TRA:
  239.     TST.L    D2
  240.     BEQ.S    L004EA        ; no new message table
  241.     BTST    #0,D2        ; test for odd address
  242.     BNE.S    L0051E        ; bad parameter return
  243.     MOVEA.L    D2,A0
  244.     CMPI.W    #$4AFB,(A0)    ; test identifier
  245.     BNE.S    L0051E
  246.     MOVE.L    A0,SV_MGTAB(A6)    ; pointer to system messages
  247. L004EA:
  248.     CLR.B    SV_TRAN(A6)    ; signal bad key translation
  249.                 ; table
  250.     TST.L    D1
  251.     BEQ.S    L00518        ; no new tra-table
  252.     CMPI.L    #1,D1        ; TRA 1 : take old key
  253.                 ; translation table
  254.     BNE.S    L00500
  255.     MOVE.L    #(KEY_TRA-ORG0),D1 ;*/modify MOVE.L $BFE2,D1
  256. L00500:
  257.     BTST    #0,D1
  258.     BNE.S    L0051E
  259.     MOVEA.L    D1,A0
  260.     CMPI.W    #$4AFB,(A0)    ; check if any usefull table
  261.                 ; is present
  262.     BNE.S    L0051E
  263.     MOVE.B    #1,SV_TRAN(A6)    ; signal that key
  264.                 ; translation is present
  265.     MOVE.L    A0,SV_TRTAB(A6)    ; pointer to key translation
  266.                 ; table
  267. L00518:
  268.     MOVEQ    #0,D0
  269.     BRA    RET_TRAP
  270. L0051E:
  271.     MOVEQ    #ERR.BP,D0    ; Bad parameter
  272.     BRA    RET_TRAP
  273. MT_JINF:
  274.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  275.     MOVEQ    #0,D3
  276.     TST.W    JB_STAT(A0)    ; job status
  277.     BEQ.S    L00532
  278.     MOVEQ    #-$01,D3
  279. L00532:
  280.     MOVE.B    JB_PRINC(A0),D3    ; jobs priority increment
  281.     MOVE.L    D2,D0
  282.     MOVE.L    A0,-(A7)
  283.     JSR    L006C6(PC)    ;*/undomodify BSR L006C6
  284.     MOVEA.L    (A7)+,A0
  285.     MOVE.L    8(A0),D2     ; owner of job
  286.     LEA    JB_END(A0),A0    ; prog start of job
  287.     BRA    RET_CLD0
  288. MT_CJOB:
  289.     TST.L    D1
  290.     BEQ.S    L00554
  291.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  292. L00554:
  293.     MOVEM.L    D1-D3/A1-A4,-(A7)
  294.     MOVEQ    #0,D7
  295.     MOVEA.L    SV_JBBAS(A6),A4    ; Ptr to base of job table
  296. L0055E:
  297.     TST.B    (A4)        ; job not active
  298.     BLT.S    L00570        ; initialize
  299.     ADDQ.W    #1,D7
  300.     ADDQ.W    #4,A4        ;*/undomend ADDQ.L #4,A4
  301.     CMPA.L    SV_JBTOP(A6),A4    ; Ptr to top of job table
  302.     BLT.S    L0055E
  303.     MOVEQ    #ERR.NJ,D0    ; invalid job
  304.     BRA.S    L005E0
  305. ; activate job
  306. L00570:
  307.     MOVEQ    #JB_END,D1    ; add size of jobs
  308.     ADD.L    D2,D1        ; descriptor to length
  309.     ADD.L    D3,D1
  310.     JSR    RESERVD1(PC)    ;*/undomodify BSR RESERVD1
  311.                 ; reserve d1 bytes
  312.     BNE.S    L005E0
  313.     MOVEM.L    (A7),D1-D3/A1
  314.     MOVE.L    A0,(A4)
  315.     CMP.W    SV_JBMAX(A6),D7    ; Highest current job number
  316.     BLS.S    L0058C        ; old job
  317.     MOVE.W    D7,SV_JBMAX(A6)    ; Highest current job number
  318. L0058C:
  319.     ADDQ.W    #JB_START,A0    ;*/undomend ADDQ.L #4,A0
  320.                 ; A0=base_of_job+4
  321.     MOVEQ    #((JB_END-JB_START)/4-1),D0 ; len of job descr
  322. L00590:
  323.     CLR.L    (A0)+        ; set job descriptor to 0
  324.     DBF    D0,L00590
  325. ; start of job
  326.     SUBA.W    #(JB_END-JB_OWNER),A0 ;*/undomend SUBA.L
  327.     MOVE.L    D1,(A0)
  328.     ADDQ.W    #(JB_TAG-JB_OWNER),A0 ;*/undomend ADDQ.L #8,A0
  329.     SWAP    D7
  330.     MOVE.W    SV_JBTAG(A6),D7    ; Current value of job tag
  331.     MOVE.W    D7,(A0)
  332.     SWAP    D7
  333.     ADDQ.W    #1,SV_JBTAG(A6)    ; Current value of job tag
  334. ; Ptr to trap redirection table
  335.     MOVE.L    SV_TRAPV(A6),(JB_TRAPV-JB_TAG)(A0)
  336.     ADDA.W    #(JB_A4-JB_TAG),A0 ;*/undomend ADDA.L
  337.                  ;*/note sign exten long
  338.     MOVE.L    D2,(A0)+     ; length of job in JB_A4
  339.     ADD.L    D2,D3        ; add data area
  340.     MOVE.L    D3,(A0)+     ; len of job + data in JB_A5
  341.     MOVEQ    #(JB_END-JB_A6),D0
  342.     ADD.L    A0,D0
  343.     MOVE.L    D0,(A0)+     ; base of jobs prog in JB_A6
  344.     ADD.L    D0,D3        ; d3=total length
  345.     EXG    D3,A0
  346.     CLR.L    -(A0)
  347.     EXG    D3,A0
  348.     MOVE.L    D3,(A0)        ; address of stack in JB_A7
  349.     ADDQ.W    #(JB_PC-JB_A7),A0 ;*/undomend ADDQ.L #6,A0
  350.     MOVE.L    A1,D3
  351.     BEQ.S    L005D4
  352.     MOVE.L    D3,D0
  353. L005D4:
  354.     MOVE.L    D0,(A0)        ; start of prog in JB_PC
  355.     MOVE.L    D0,(JB_START-JB_PC)(A0); and in JB_START
  356.     bsr    CJOBFIX        ;*/modify LEA (JB_END-JB_PC)(A0),A0
  357.     MOVEQ    #0,D0
  358. L005E0:
  359.     MOVEM.L    (A7)+,D1-D3/A1-A4
  360.     MOVE.L    D7,D1
  361.     BRA    RET_TRAP
  362. L005EA:
  363. MT_RJOB:
  364.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  365.     MOVE.L    D1,D0
  366. L005F0:
  367.     TST.B    JB_PRINC(A0)    ; jobs priority increment
  368.     BNE    L006C0        ; not complete
  369.     JSR    L006C6(PC)    ;*/undomodify BSR L006C6
  370.                 ; look for next job
  371.     TST.L    D1        ; same owner ?
  372.     BNE.S    L005F0        ; continue
  373.     MOVE.L    D0,D1        ; restore D1 (Job ID)
  374. MT_FRJOB:
  375.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  376.     MOVE.L    D1,D0        ; job ID
  377.     BEQ    L006C0        ; BASIC ? 'not complete'
  378.     BSR    L006EE        ;*/modify MOVEA.W  D1,A1
  379.                 ;*/modify ADDA.W A1,A1
  380.                 ;*/modify ADDA.W A1,A1
  381.                 ;*/modify ADDA.L     SV_JBBAS(A6),A1
  382. L00616:
  383.     MOVE.W    #$FFFD,JB_STAT(A0) ;*/modify ADDQ.B   #1,(A1)
  384.                 ; mark JOB for later removal
  385.     JSR    L006C6(PC)    ;*/undomodify BSR L006C6
  386.                 ;*/remove TST.L     D1
  387.                 ;*/note flags already set for D1
  388.     BNE.S    L00616        ; find next job in tree
  389.     SF    -(A7)
  390.                 ;*/remove MOVEQ     #0,D1
  391.                 ;*/note D1 is 0 at this point
  392.     MOVEA.L    SV_JBBAS(A6),A1    ; Ptr to base of job table
  393. L00628:
  394.     ADDQ.W    #4,A1        ;*/undomend ADDQ.L #4,A1
  395.     ADDQ.W    #1,D1
  396.     CMP.W    SV_JBMAX(A6),D1    ; Highest current job number
  397.     BHI    L006B6
  398.     MOVEA.L    (A1),A0        ;*/insert
  399.     TST.B    (A1)
  400.     BLT.S    L00628        ;*/modify BLE.S L00628
  401.                 ; loop if no valid entry
  402.     CMP.W    #$FFFD,JB_STAT(A0) ;*/insert
  403.     BNE.S    L00628        ;*/insert
  404.                 ; loop if not a marked job
  405.                 ;*/remove CLR.B     (A1)
  406.                 ; unmark job
  407.                 ;*/remove MOVEA.L  (A1),A0
  408.     SWAP    D1
  409.     MOVE.W    JB_TAG(A0),D1    ; tag for job
  410.     SWAP    D1
  411.     CMPA.L    SV_JBPNT(A6),A1    ; Ptr to current job table
  412.                 ; entry
  413.     BNE.S    L0064C
  414.     ST    (A7)
  415. L0064C    TST.B    JB_WFLAG(A0)    ; is any job waiting for
  416.                 ; this to finish ?
  417.     BEQ.S    L00670
  418.     MOVE.L    JB_WJOB(A0),D0    ; D0 = ID of waiting JOB
  419.     EXG    D0,D1
  420.     JSR    L003E4(PC)    ;*/undomodify BSR L003E4
  421.                 ; job OK?
  422.     EXG    D1,D0
  423.     BNE.S    L00670
  424.     CMPI.W    #$FFFE,JB_STAT(A0) ; test JOB status
  425.     BNE.S    L00670
  426.     CLR.W    JB_STAT(A0)    ; job status=0
  427.     MOVE.L    D3,JB_D0(A0)
  428. ; now the channels owned by this job are suspended
  429. L00670:
  430.     MOVEA.L    SV_CHEAP(A6),A0    ; Base of common heap area
  431. L00674:
  432.     CMP.L    JB_OWNER(A0),D1    ; owner of JOB
  433.     BNE.S    L0069A
  434.     MOVEM.L    D1/D3/A0-A1,-(A7)
  435.     MOVE.L    JB_HOLD(A0),D1
  436.     BEQ.S    L00688
  437.     MOVEA.L    D1,A1
  438.     ST    (A1)
  439. L00688:
  440.     MOVEA.L    JB_START(A0),A1
  441.     LEA    -$18(A1),A3
  442.     MOVEA.L    $0C(A1),A1
  443.     JSR    (A1)
  444.     MOVEM.L    (A7)+,D1/D3/A0-A1
  445. L0069A:
  446.     ADDA.L    (A0),A0
  447.     CMPA.L    SV_FREE(A6),A0    ; Base of free area
  448.     BLT.S    L00674
  449.     MOVEM.L    D1/D3/A1,-(A7)
  450.     MOVEA.L    (A1),A0
  451.     JSR    RELE_MEM(PC)    ;*/undomodify BSR RELE_MEM
  452.                 ; release memory
  453.     MOVEM.L    (A7)+,D1/D3/A1
  454.     ST    (A1)
  455.     BRA    L00628
  456. L006B6:
  457.     TST.B    (A7)+
  458.     BEQ    RET_CLD0
  459.     BRA    L0093A
  460. L006C0:
  461.     MOVEQ    #ERR.NC,D0    ; not complete error
  462.     BRA    RET_TRAP
  463. L006C6:
  464.     MOVE.L    D1,D2        ; D2= owner job
  465.     MOVEQ    #0,D1
  466. L006CA:
  467.     ADDQ.W    #1,D1
  468.     CMP.W    SV_JBMAX(A6),D1    ; Highest current job number
  469.     BGT.S    L006E0
  470.     BSR.S    L006EE        ; get job base
  471.     TST.B    (A1)        ; is it active
  472.     BLT.S    L006CA
  473.     CMP.L    JB_OWNER(A0),D2    ; same owner of job
  474.     BEQ.S    L00700
  475.     BRA.S    L006CA        ; continue searching
  476. L006E0:
  477.     CMP.W    D2,D0
  478.     BEQ.S    L006FC
  479.     MOVE.W    D2,D1
  480.     BSR.S    L006EE
  481.     MOVE.L    JB_OWNER(A0),D2    ; owner of job
  482.     BRA.S    L006CA        ; continue searching
  483. L006EE:
  484.                 ;*/undoinsert SUBA.L A1,A1
  485.     MOVEA.W    D1,A1        ;*/note D1 sign exten long
  486.     ADDA.L    A1,A1        ;*/mend ADDA.W A1,A1
  487.     ADDA.L    A1,A1        ;*/mend ADDA.W A1,A1
  488.     ADDA.L    SV_JBBAS(A6),A1    ; Ptr to base of job table
  489.     MOVEA.L    (A1),A0
  490.     RTS
  491. L006FC:
  492.     MOVEQ    #0,D1
  493.     RTS
  494. L00700:
  495.     SWAP    D1
  496.     MOVE.W    JB_TAG(A0),D1    ; TAG for job
  497.     SWAP    D1
  498.     RTS
  499. L0070A:
  500. MT_TRAPV:
  501.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  502. ; only for those fools, which do not use MT.TRAPV
  503.     SUBA.W    #$54,A1        ;*/undomend SUBA.L
  504.                 ;*/note #$54 sign exten long
  505.     MOVE.L    A1,SV_TRAPV(A6)    ; Ptr to trap redirection
  506.                 ; table
  507.     MOVE.L    A1,JB_TRAPV(A0)    ; TRAPV
  508.     BRA    RET_CLD0
  509. L0071E:
  510. MT_ALLOC:
  511.     ADDA.L    8(A5),A0     ; A0 = ptr to ptr to free
  512.                 ; space
  513.     JSR    MM_ALLOC(PC)    ;*/undomodify BSR MM_ALLOC
  514.     SUBA.L    8(A5),A0     ; base of allocated area
  515.     bra.s    L007A2
  516. L0072C:
  517. MT_LNKFR:
  518.     ADDA.L    8(A5),A0
  519.     ADDA.L    8(A5),A1
  520.     JSR    MM_LNKFR(PC)    ;*/undomodify BSR MM_LNKFR
  521.     bra.s    L007A2
  522. L0073A:
  523. MT_ALCHP:
  524.     EXG    D2,D1
  525.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  526.     MOVE.L    D1,-(A7)
  527.     MOVEQ    #$10,D1
  528.     ADD.L    D2,D1        ; d2= number of bytes
  529.     JSR    MM_ALCHP(PC)    ;*/undomodify BSR MM_ALCHP
  530.     bne.s    L007BC
  531.     ADDQ.W    #4,A0        ;*/undomend ADDQ.L #4,A0
  532. L0074E:
  533.     MOVE.L    #(L0075A-ORG0-$0C),(A0)+ ; pointer to address
  534.                        ; of release..pardon?
  535.     MOVE.L    (A7)+,(A0)+
  536.     CLR.L    (A0)+
  537.     BRA.S    L00766
  538. L0075A:
  539.     DC.L    MM_RECHP-ORG0    ;*/note I don't understand
  540. L0075E:
  541. MT_RECHP:
  542.     LEA    -$10(A0),A0
  543.     JSR    MM_RECHP(PC)    ;*/undomodify BSR MM_RECHP
  544. L00766:
  545.     BRA    RET_CLD0
  546. L0076A:
  547. MT_ALRES:
  548. MT_RERES:
  549.     MOVEA.L    SV_RESPR(A6),A0    ; base of resident proc area
  550.     CMPA.L    SV_TRNSP(A6),A0    ; base of trans'nt prog area
  551.     BNE.S    L007A0
  552.     CMPI.B    #$0F,D0        ; $F -> release
  553.     BEQ.S    L00786
  554.     TST.L    D1
  555.     BLE.S    L00766
  556.     JSR    RESERVD1(PC)    ;*/undomodify BSR RESERVD1
  557.                 ; reserve d1 bytes
  558.     blt.s    L007BE        ;*/undomodify BLT RET_TRAP
  559.                 ;*/note would be quicker
  560.     BRA.S    L00792
  561. L00786:
  562.     MOVE.L    SV_RAMT(A6),D1    ; Top of RAM(+1)
  563.     SUB.L    SV_RESPR(A6),D1    ; Base of resident procs
  564.     JSR    RELE_MEM(PC)    ;*/undomodify BSR RELE_MEM
  565.                 ; release memory
  566. L00792:
  567.     MOVE.L    SV_TRNSP(A6),$1C(A6) ; Base of transient progs
  568.     CLR.L    SV_TRNFR(A6)    ; First free space in TPA
  569.     BRA    RET_CLD0
  570. L007A0:
  571.     MOVEQ    #ERR.NC,D0    ; not complete error
  572. L007A2:
  573.     bra.s    L007BE        ;*/undomodify BRA RET_TRAP
  574.                 ;*/note would be quicker
  575. L007A4:
  576. MT_ALBAS:
  577.     JSR    L031B8(PC)    ;*/undomodify BSR L031B8
  578.                 ; allocate memory
  579.     bra.s    L007BE        ;*/undomodify BRA RET_TRAP
  580.                 ;*/note would be quicker
  581. MT_REBAS:
  582.     MOVE.L    SV_TRNSP(A6),-(A7) ; Base of transient progs
  583.     SUB.L    D1,SV_TRNSP(A6)    ; Base of transient progs
  584.     JSR    L031C8(PC)    ;*/undomodify BSR L031C8
  585.                 ; release memory
  586.     MOVE.L    (A7)+,SV_TRNSP(A6) ; Base of transient progs
  587.     BRA.S    L007BE
  588. L007BC:
  589.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L   #4,A7
  590. L007BE:
  591.     BRA    RET_TRAP
  592. L007C2:
  593. ; --------------------------------------------------------------
  594. ;*/beginoverlay
  595.  
  596. MT_DMODE:
  597.     bsr    MODEFIX        ;*/modify MOVE.B SV_MCSTA(A6),D0
  598.  
  599.     cmp.b    #-1,d1        ;*/modify TST.B  D1  ; read ?
  600.     beq    L0085E        ;*/modify BLT    L0085E
  601.  
  602. MT_DMOD1:
  603.     move.l    d2,-(a7)     ;swap     d2
  604.  
  605.     addi.b    #%01000000,d1    ; if bits 7/6 do not differ...
  606.  
  607.     tst.b    d1
  608.     bmi.s    MT_DMOD2
  609.  
  610.     andi.w    #%0000000000001000,d1    ; only change mode
  611.     ori.w    #%0111011100000000,d1
  612.     bra.s    MT_DMOD4
  613.  
  614. MT_DMOD2:
  615.     btst    #6,d1
  616.     bne.s    MT_DMOD4
  617.  
  618. MT_DMOD3:
  619.     ext.w    d1        ; if bit 6 was set, set msbyte
  620.  
  621. MT_DMOD4:
  622.     move.b    d0,d2
  623.     rol.w    #8,d1
  624.     and.b    d1,d2
  625.     rol.w    #8,d1
  626.     eor.b    d1,d2
  627.     eor.b    d0,d2
  628.     lsl.b    #2,d2
  629.     bpl.s    MT_DMOD5
  630.  
  631.     bsr    MODEFIX4     ; exchange lower bits if default scr changes
  632.  
  633. MT_DMOD5:
  634.     rol.w    #8,d1
  635.     and.b    d1,d0
  636.     rol.w    #8,d1
  637.     eor.b    d1,d0
  638.  
  639.     move.b    d0,d2
  640.     lsr.b    #5,d2
  641.  
  642.     eor.b    d2,JB_RELA6(a4)    ; set  BASICs' JB_RELA6
  643.     andi.b    #%11111110,JB_RELA6(a4)
  644.     eor.b    d2,JB_RELA6(a4)
  645.  
  646.     lsl.w    #3,d0        ; default/shown display into 7/6
  647.     asr.b    #2,d0
  648.     lsr.w    #1,d0
  649.  
  650.     tst.b    d0
  651.     bpl.s    MT_DMOD6
  652.  
  653.     roxl.l    #1,d1        ; swap bits if default=scrn1
  654.     rol.w    #1,d1
  655.     roxr.l    #1,d1
  656.     roxr.w    #1,d1        ; enable clr scrn0/scrn1 into 15/14
  657.  
  658. MT_DMOD6:
  659.     addi.b    #%01000000,d0
  660.     bpl.s    MT_DMOD7
  661.  
  662.     bsr    MODEFIX4     ; exchange lower bits if default<>shown
  663.  
  664. MT_DMOD7:
  665.     lsl.b    #2,d0
  666.     asr.b    #2,d0        ; position shown display
  667.  
  668.     move.b    d0,SV_MCSTA(a6)
  669.     andi.b    #%10001010,d0
  670.     move.b    d0,MC_STAT
  671.  
  672.     move.l    (a7)+,d2     ; swap      d2
  673.  
  674.     bsr    MDCLS        ; can't fit so use sub
  675.  
  676. ;     ori.w     #$8000,sr
  677.  
  678. ; reinitialization of screen channels
  679.     MOVEA.L    SV_CHBAS(A6),A4    ; Ptr to base of channel
  680.                 ; table
  681. L007F2:
  682.     MOVE.L    (A4)+,D0
  683.     MOVEM.L    D1-D6/A0-A6,-(A7)
  684.     BLT.S    L00852        ; channel closed ?
  685.  
  686.     MOVEA.L    D0,A0
  687.     cmpi.l    #$20000,SD_SCRB(a0)
  688.     beq.s    MT_DMOD8
  689.  
  690.     cmpi.l    #$28000,SD_SCRB(a0)
  691.     bne.s    L00852        ; not a screen channel
  692.  
  693.     lsl.w    #1,d1
  694.  
  695. MT_DMOD8:
  696.     tst.w    d1
  697.     bmi.s    L00852
  698.  
  699. MT_DMOD9:
  700.     MOVE.W    SD_BORWD(A0),-(A7)
  701.     LEA    SD_PMASK(A0),A1    ; paper colour mask
  702.     LEA    SD_PCOLR(A0),A5    ; paper colour byte
  703.     MOVEQ    #$02,D0
  704. L0081C:
  705.     MOVE.B    (A5)+,D1
  706.     JSR    L027D8(PC)    ;*/undomodify BSR L027D8
  707.                 ; set paper mask
  708.     ADDQ.W    #4,A1        ;*/undomend ADDQ.L #4,A1
  709.     DBF    D0,L0081C
  710.     JSR    SD_CLEAR(PC)    ;*/undomodify BSR SD_CLEAR
  711.     MOVE.B    (A5),D1
  712.     MOVE.W    (A7)+,D2
  713.     JSR    SD_BORDR(PC)    ;*/undomodify BSR SD_BORDR
  714.     SUBQ.W    #5,A5        ;*/undomend SUBQ.L #5,A5
  715.     ANDI.B    #0,(A5)        ; reset char-attributes to 0
  716.     MOVE.L    #$6000A,SD_XINC(A0) ; reset char size
  717.     bsr    MDTSTFIX
  718.     BEQ.S    L0084E        ; mode 4
  719.     BSET    #6,(A5)+     ; mode 8
  720.     LSL.W    SD_XINC(A0)
  721. L0084E:
  722.     TST.B    (A5)        ; cursor status
  723.     SNE    (A5)
  724. L00852:
  725.     MOVEM.L    (A7)+,D1-D6/A0-A6
  726.     CMPA.L    SV_CHTOP(A6),A4    ; Ptr to top of channel
  727.                 ; table
  728.     BLT.S    L007F2        ; continue for all channels
  729.                 ;*/removecode BRA.S L00862
  730. L0085E:
  731.     exg    d0,d1        ;*/removecode MOVEQ #8,D1
  732.                 ;*/removecode AND.B D0,D1
  733.  
  734. L00862:
  735.     TST.B    D2
  736.     BGE.S    L0086A
  737.     MOVE.B    SV_TVMOD(A6),D2    ; 0 if not TV display
  738. L0086A:
  739.     MOVE.B    D2,SV_TVMOD(A6)    ; 0 if not TV display
  740.  
  741. ; disable command-to-8049 and change-baud-rate
  742. L00872:
  743. MT_IPCOM:
  744.  
  745. L00882:
  746. MT_BAUD:
  747.     BRA    RET_CLD0
  748.  
  749. NOP008E6:
  750.     DCB.w    ($8E6-(NOP008E6-ORG0))/2,$4E71
  751. L008E6:
  752. ;*/endoverlay
  753. ; --------------------------------------------------------------
  754. MT_LXINT:
  755. MT_LPOLL:
  756. MT_LSCHD:
  757. MT_LIOD:
  758. MT_LDD:
  759.     ADD.W    D0,D0
  760.     LEA    4(A6,D0.W),A1    ; decide if external
  761.                 ; interrupt/ 50 Hz
  762.     JSR    UT_LINK(PC)    ;*/undomodify BSR UT_LINK
  763.                 ; /scheduler task /IO device
  764.                 ; /Directory
  765.     BRA.S    L008FC
  766. MT_RXINT:
  767. MT_RPOLL:
  768. MT_RSCHD:
  769. MT_RIOD:
  770. MT_RDD:
  771.     ADD.W    D0,D0
  772.     LEA    2(A6,D0.W),A1
  773.     JSR    MT_UNLNK(PC)    ;*/undomodify BSR MT_UNLNK
  774. L008FC    BRA    RET_CLD0
  775. ; --------------------------------------------------------------
  776. ;  50 Hz vertical Blank interrupt server
  777. ; --------------------------------------------------------------
  778. L00900:
  779.     ADDQ.W    #1,SV_POLLM(A6)    ; Count of poll ints missed
  780.     BVC.S    L0090A
  781.     SUBQ.W    #1,SV_POLLM(A6)    ; Count of poll ints missed
  782. L0090A:
  783.     MOVEM.L    D0-D6/A0-A4,-(A7)
  784.     MOVEQ    #-$08,D0
  785.     MOVEQ    #$01,D3
  786.     MOVEA.L    SV_PLIST(A6),A0    ; Ptr to list of polled
  787.                 ; tasks
  788.     JSR    EXEC_TSK(PC)    ;*/undomodify BSR EXEC_TSK
  789.     MOVEM.L    (A7)+,D0-D6/A0-A4
  790.     MOVE.B    SV_PCINT(A6),D7    ; Current value of PC
  791.                 ; interrupt register
  792.     ori.b    #$08,d7        ;*/restorecode
  793.     move.b    d7,PC_INTR    ;*/restorecode
  794.     BTST    #5,$C(A7)    ; supervisor mode ?
  795.     BNE    L003B6
  796. L00936:
  797.     JSR    L009D4(PC)    ;*/undomodify BSR L009D4
  798.                 ; save jobs area
  799. L0093A:
  800.     MOVE.W    SV_POLLM(A6),D3    ; Count of poll ints missed
  801.     CLR.W    SV_POLLM(A6)    ; Count of poll ints missed
  802.     ADDQ.W    #1,SV_RAND(A6)    ; random number
  803.     MOVEQ    #-$10,D0
  804.     MOVEA.L    SV_SHLST(A6),A0    ; ptr to list of scheduler
  805.                 ; tasks
  806.     JSR    EXEC_TSK(PC)    ;*/undomodify BSR EXEC_TSK
  807.                 ; execute polled task
  808.     JSR    L00A0C(PC)    ;*/undomodify BSR L00A0C
  809.                 ; get highest job priority
  810.     TST.L    D0
  811.     BLT.S    L0093A        ; continue
  812.     MOVE.L    D0,SV_JBPNT(A6)    ; ptr to current jobtable
  813.                 ; entry
  814.     JSR    EXEC_JOB(PC)    ;*/undomodify BSR EXEC_JOB
  815.                 ; Execute job
  816. L00960:
  817. MT_SUSJB:
  818.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  819.     MOVE.W    D3,JB_STAT(A0)    ; job status
  820.     MOVE.L    A1,JB_HOLD(A0)
  821.     MOVEQ    #0,D0
  822.     BRA.L    L00936        ;*/undomodify bra.s L00936
  823.                 ;*/undomodify nop
  824. L00972:
  825. MT_RELJB:
  826.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  827.     TST.W    JB_STAT(A0)    ; job status
  828.     BEQ.S    L0098A
  829.     CLR.W    JB_STAT(A0)    ; job status
  830.     MOVE.L    JB_HOLD(A0),D0    ; pointer to byte which will
  831.                 ; be cleared when release
  832.     BEQ.S    L0098A
  833.     MOVEA.L    D0,A0
  834.     SF    (A0)
  835. L0098A:
  836.     MOVEQ    #0,D0
  837.     BRA.L    L00936        ;*/undomodify BRA.S L00936
  838.                 ;*/undomodify nop
  839. L00990:
  840. MT_PRIOR:
  841.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  842.     MOVE.B    D2,JB_PRINC(A0)    ; priority increment
  843.     BNE.S    L009CA
  844.     SF    JB_PRIOR(A0)    ; current accumulated
  845.                 ; priority
  846.     BRA.S    L009CA
  847. L009A0:
  848. MT_ACTIV:
  849.     JSR    GETJOBID(PC)    ;*/undomodify BSR GETJOBID
  850.     TST.B    JB_PRINC(A0)    ; priority increment
  851.     BNE.S    L009D0
  852.     MOVE.B    D2,JB_PRINC(A0)    ; priority increment
  853.     MOVE.L    JB_START(A0),JB_PC(A0) ; start address on
  854.                 ; activation -> saved PC
  855.     TST.W    D3
  856.     BEQ.S    L009CA
  857.     ST    JB_WFLAG(A0)    ; there is a job waiting for
  858.                 ; this one
  859.     JSR    JOBID_ME(PC)    ;*/undomodify BSR JOBID_ME
  860.     MOVE.L    D0,JB_WJOB(A0)    ; ID of job waiting for this
  861.                 ; to finish
  862.     MOVE.W    #-2,JB_STAT(A3)    ; JOB is waiting for another
  863.                 ; job to finish
  864. L009CA:
  865.     MOVEQ    #0,D0
  866. L009CC:
  867.     BRA    L00936
  868. L009D0:
  869.     MOVEQ    #ERR.NC,D0    ; Not complete
  870.     BRA.S    L009CC
  871. L009D4:
  872.     MOVE.L    A6,-(A7)
  873.     MOVEA.L    $64(A6),A6    ; pointer to current job
  874.                 ; table entry
  875.     MOVEA.L    (A6),A6        ; get job table of actual
  876.                 ; job
  877.     TST.B    $12(A6)        ; current accumulated
  878.                 ; priority
  879.     BEQ.S    L009E8
  880.     MOVE.B    #$01,$12(A6)    ; reset accumulated priority
  881. L009E8:
  882.     MOVEM.L    D0-D7/A0-A4,$20(A6) ; save registers of job
  883.     MOVE.L    (A5)+,$3C(A6)    ; save D7
  884.     MOVE.L    (A5)+,$54(A6)    ; save A5
  885.     MOVE.L    (A5)+,$58(A6)    ; save A6
  886.     MOVE.L    USP,A0
  887.     MOVE.L    A0,$5C(A6)    ; save A7
  888.     MOVE.W    (A5)+,$60(A6)    ; save SR
  889.     MOVE.L    (A5)+,$62(A6)    ; save PC
  890.     MOVEA.L    (A7)+,A6
  891.     RTS
  892. L00A0C:
  893.     MOVEQ    #-2,D0
  894.     MOVEQ    #0,D1
  895.     MOVEA.L    $64(A6),A2    ;SV.JBPNT   Pointer to
  896.                 ; current job table entry
  897.     MOVEA.L    A2,A4
  898.                 ;*/undoinsert CLR.L D2
  899.     MOVE.W    $62(A6),D2    ;SV.JBMAX   Highest current
  900.                 ; job number
  901.     LSL.W    #2,D2        ;*/undomend LSL.L
  902.                 ;*/note not neccessary
  903.     MOVEA.L    $68(A6),A3    ;SV.JBBAS   Pointer to base
  904.                 ; of job table
  905.     ADDA.W    D2,A3        ;*/undomend ADDA.L
  906.                 ;*/note D2 sign extended long
  907. L00A22:
  908.     ADDQ.W    #4,A2        ;*/undomend ADDQ.L #4,A2
  909.     CMPA.L    A3,A2
  910.     BLE.S    L00A2C
  911.     MOVEA.L    $68(A6),A2    ;SV.JBBAS   Pointer to base
  912.                 ; of job table
  913. L00A2C:
  914.     TST.B    (A2)
  915.     BLT.S    L00A72
  916.     MOVEA.L    (A2),A0
  917.     TST.B    $13(A0)        ; jobs priority increment
  918.     BEQ.S    L00A72
  919.     TST.W    $14(A0)        ; job status
  920.     BEQ.S    L00A54
  921.     BLT.S    L00A72
  922.     SUB.W    D3,$14(A0)    ; job status
  923.     BGT.S    L00A72
  924.     CLR.W    $14(A0)        ; job status=0
  925.     MOVE.L    $0C(A0),D2
  926.     BEQ.S    L00A54
  927.     MOVEA.L    D2,A1
  928.     SF    (A1)
  929. L00A54:
  930.     MOVE.B    $12(A0),D2    ; jobs accumulated priority
  931.     BEQ.S    L00A64
  932.     ADD.B    $13(A0),D2    ; jobs priority increment
  933.     BCC.S    L00A66
  934.     ST    D2
  935.     BRA.S    L00A66
  936. L00A64:
  937.     MOVEQ    #$01,D2
  938. L00A66:
  939.     MOVE.B    D2,$12(A0)    ; jobs accumulated priority
  940.     CMP.B    D1,D2
  941.     BLS.S    L00A72
  942.     MOVE.L    A2,D0
  943.     MOVE.B    D2,D1
  944. L00A72:
  945.     CMPA.L    A4,A2
  946.     BNE.S    L00A22
  947.     RTS
  948. ; Execute job
  949. L00A78:
  950. EXEC_JOB:
  951.     MOVEA.L    $64(A6),A0    ;SV.JBPNT   Pointer to
  952.                 ; current job table entry
  953.     MOVEA.L    (A0),A0
  954.     ADDA.W    #$16,A7        ;*/undomend ADDA.L
  955.                 ;*/note #$16 sign extended long
  956.     MOVE.L    $62(A0),-(A7)
  957.     MOVE.W    $60(A0),-(A7)
  958.     MOVE.L    $1C(A0),$50(A6)    ;SV.TRAPV   Pointer to trap
  959.                 ; redirection table
  960.     MOVEA.L    $5C(A0),A1
  961.     MOVE.L    A1,USP
  962.     MOVEM.L    $20(A0),D0-D7/A0-A6
  963.     RTE
  964. ; --------------------------------------------------------------
  965. ;*/beginoverlay
  966.  
  967. ;    was EXEC_TSK routine (now in DBUGCODE_asm)
  968. ; ...had to move these routines here from within first 1K area
  969.  
  970. L003BC:
  971. GETJOBID:
  972.     TST.W    D1
  973.     BGE.S    L003D8
  974.     MOVE.L    SV_JBPNT(A6),D1    ; pointer to current job
  975.                 ; table entry
  976.     MOVEA.L    D1,A0
  977.     MOVEA.L    (A0),A0        ; Get job table entry
  978.     SUB.L    SV_JBBAS(A6),D1    ; subtract pointer to base
  979.                 ; of job table
  980.     LSR.L    #2,D1        ; divide by 4
  981.     SWAP    D1        ; job number is ready
  982.     MOVE.W    $10(A0),D1    ; get job tag
  983.     SWAP    D1
  984. L003D6:
  985.     RTS
  986. L003D8:
  987.     BSR.S    L003E4        ; valid job ?
  988.     BEQ.S    L003D6
  989.     MOVEQ    #ERR.NJ,D0    ; invalid job !
  990.     ADDQ.W    #4,A7        ;*/undomend ADDQ.L #4,A7
  991.     BRA.L    RET_TRAP     ;*/undomodify bra.s RET_TRAP
  992.                 ;*/undomodify nop
  993. L003E4:
  994.     CMP.W    SV_JBMAX(A6),D1    ; highest current job number
  995.     BHI.S    L003D6        ; RTS
  996.                 ;*/undoinsert SUB.L A0,A0
  997.     MOVEA.W    D1,A0        ;*/note D1 sign exten long
  998.     ADDA.L    A0,A0        ;*/mend ADDA.W A0,A0
  999.     ADDA.L    A0,A0        ;*/mend ADDA.W A0,A0
  1000.     ADDA.L    SV_JBBAS(A6),A0    ; pointer to base of job
  1001.                 ; table
  1002.     TST.B    (A0)
  1003.     BLT.S    L003D6
  1004.     MOVEA.L    (A0),A0
  1005.     SWAP    D1
  1006.     CMP.W    JB_TAG(A0),D1    ; job tag
  1007.     BNE.S    L003D6
  1008.     SWAP    D1
  1009.     CMP.B    D1,D1
  1010.     RTS
  1011.  
  1012. ;*/endoverlay
  1013. ; --------------------------------------------------------------
  1014. ;*/endfile
  1015.